/*
 * @Author: 运算符的使用
 * @Date: 2021-01-20 18:51:17
 * @LastEditTime: 2021-01-21 16:12:05
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \go_demo\src\symbol03\main.go
 */
package main

import "fmt"

func main () {
  /*
  除法注意:如果运算的数都是整数,那么除后,去掉小数部分,保留整数部分
  取余注意:余数-被除数-(被除数/除数) *除数
  注意: ++ (自增)和下--(自减)在Go语言中是单独的语句,并不是运算符。（不能赋值 a := 1++）
  */

  var a = 10
  var b = 3
  fmt.Println(a + b)  //13
  fmt.Println(a - b)  //7
  fmt.Println(a * b)  //30
  fmt.Println(a / b)  //3
  //取余注意 余数=被除数-(被除数/除数) *除数
  fmt.Println(a % b)  //1

  /*
  ==检查两个值是否相等,如果相等返回True否则返回False.
  !=检查两个值是否不相等,如果不相等返回True否则返回False.
  >检查左边值是否大于右边值,如果是返回True否则返回False.
  >=检查左边值是否大于等于右边值,如果是返回True否则返回False.
  <检查左边值是否小于右边值,如果是返回True否则返回False.
  <=检查左边值是否小于等于右边值,如果是返回True否则返回False.

  && 逻辑AND运算符。 如果两边的操作数都是True,则为True,否则为False.11 
  || 逻辑OR运算符。 如果两边的操作数有一个True,则为True,否则为False.
  !  逻辑NOT运算符。如果条件为True,则为False,否则为True.
  */

  /*
  =  简单的赋值运算符,将一个表达式的值赋给一个左值
  += 相加后再赋值
  -= 相减后再赋值
  *= 相乘后再赋值
  /= 相除后再赋值
  %- 求余后再赋值
  */

  /*
    位运算  （二进制运算符）
    &两位均为1才为1
    |两位有一个为1就为1
    ^相异或 两位不一样则为1
    << 左移n位就是乘以2的n次方。 "a<<b"是把a的各二进位全部左移b位,高位丢弃,低位补e.
    >>右移n位就是除以2的n次方。
  */  
  var a1 = 5         //二进制结果：101
  var b1 = 2         //二进制结果：010

  fmt.Println("a1 & b1 = ", a1 & b1)  //1与0 - 0与1 - 1与0  比较结果为000 返回十进制0
  fmt.Println("a1 | b1 = ", a1 | b1)  //1或0 - 0或1 - 1或0  比较结果为111 返回十进制7
  fmt.Println("a1 ^ b1 = ", a1 ^ b1)  //1异或0 - 0异或1 - 1异或0  比较结果为111 返回十进制7
  // a1 5 左移 b1 2位 此时 a1 = 10100，返回十进制20 （5 * 2的2次方）
  fmt.Println("a1 << b1 = ", a1 << b1)  
  //a1 5 右移 b1 2位 此时 a1 = 001，返回十进制1 （5 / 2的2次方）
  fmt.Println("a1 >> b1 = ", a1 >> b1)
}